if (Target > chan(2).SoftLimitPos-TINYDIST)
Target = chan(2).SoftLimitPos-TINYDIST;
if (Target < chan(2).SoftLimitNeg+TINYDIST)
Target = chan(2).SoftLimitNeg+TINYDIST;
replace wherever you have "(2)" with "[Axis]" (without the quotes). You are getting the "function pointer" error because, in C, the round brackets indicate parameters to a function. So, where you write chan(2) the compiler is then expecting 'chan' to be the name of a function or a pointer to one. But chan is really an array, so it needs to be indexed with square brackets. Also, you don't want '2' in there, since then it would be comparing every axis to the limits for just the Z axis (number 2). Since 'Axis' is the variable which contains the axis number that you are jogging, that is the appropriate index.
I know it's difficult to wrap your mind around (of all people, I had the greatest difficulty grokking arrays when I started programming, and C is definitely not a beginner's language). Here's something that might be helpful in this case:
chan - is the name of an array
chan[n] - is the n'th element of chan. C counts the first element as number 0, then counts up from there. The joke is that you can tell someone is a C programmer because when counting how many fingers they have, they go "zero, one, two, three, four - I have five fingers!"
chan[n].foo - is the field called 'foo' in the n'th element of chan. On the kflop, there are a lot of useful fields in each channel element. For example, SoftLimitPos.
Regards,
SJH